package org.dxy.infrastructure.persistent.db.mybatispuls.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseService;
import org.dxy.infrastructure.persistent.db.mybatispuls.po.ProcessParamRequirementPo;

import java.util.List;

/**
 * @description: 工序参数配置Service接口
 * @author: dxy
 * @createTime: 2025/1/21
 */
public interface ProcessParamRequirementService extends MPJBaseService<ProcessParamRequirementPo> {

    /**
     * 分页查询工序参数配置列表（包含关联信息）
     * @param page 分页参数
     * @param query 查询条件
     * @return 分页的工序参数配置列表
     */
    Page<ProcessParamRequirementPo> selectPageListWithDetails(Page<ProcessParamRequirementPo> page, ProcessParamRequirementPo query);

    /**
     * 根据工序ID查询参数配置列表（包含关联信息）
     * @param processId 工序ID
     * @return 工序参数配置列表
     */
    List<ProcessParamRequirementPo> selectByProcessIdWithDetails(Long processId);

    /**
     * 根据参数定义ID查询工序参数配置列表（包含关联信息）
     * @param paramDefinitionId 参数定义ID
     * @return 工序参数配置列表
     */
    List<ProcessParamRequirementPo> selectByParamDefinitionIdWithDetails(Long paramDefinitionId);

    /**
     * 查询必填参数配置（包含关联信息）
     * @param processId 工序ID（可选）
     * @return 必填参数配置列表
     */
    List<ProcessParamRequirementPo> selectRequiredParamsWithDetails(Long processId);

    /**
     * 根据ID查询工序参数配置详情（包含关联信息）
     * @param id 工序参数配置ID
     * @return 工序参数配置详情
     */
    ProcessParamRequirementPo selectByIdWithDetails(Long id);

    /**
     * 检查工序参数配置是否存在
     * @param processId 工序ID
     * @param paramDefinitionId 参数定义ID
     * @param excludeId 排除的ID（用于更新时检查）
     * @return 存在的数量
     */
    int checkProcessParamExists(Long processId, Long paramDefinitionId, Long excludeId);

    /**
     * 根据工序ID删除所有参数配置
     * @param processId 工序ID
     * @return 删除的数量
     */
    int deleteByProcessId(Long processId);

    /**
     * 批量删除工序参数配置
     * @param ids 工序参数配置ID列表
     * @return 删除的数量
     */
    int batchDeleteByIds(List<Long> ids);

    /**
     * 批量插入工序参数配置
     * @param entities 工序参数配置实体列表
     * @return 插入的数量
     */
    int batchInsert(List<ProcessParamRequirementPo> entities);
}